package com.yidu.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.comment.Tools;
import com.yidu.dao.SnMaInDetailMapper;
import com.yidu.dao.SnMaInventoryMapper;
import com.yidu.dao.SnMaterialsMapper;
import com.yidu.model.SnMaInDetail;
import com.yidu.model.SnMaInventory;
import com.yidu.model.SnMaterials;
import com.yidu.model.SnUser;
import com.yidu.service.SnMaterialsService;

/**
 * 原材料实现类
 * @author chensituo
 * @date 2018年11月30日 下午3:23:40
 */
@Service
public class SnMaterialsServiceImpl implements SnMaterialsService{
	/**
	 * 注入原材料mapper
	 */
	@Resource
	SnMaterialsMapper materialsMapper;
	/**
	 * 注入原材料库存mapper
	 */
	@Resource
	SnMaInventoryMapper maInventoryMapper;
	/**
	 * 注入材料库存记录mapper
	 */
	@Resource
	SnMaInDetailMapper maInDetailMapper;
	@Override
	public List<SnMaterials> findAll(Map<String, Object> maps) {
		//调用查询所有的方法
		return materialsMapper.findAll(maps);
	}

	@Override
	public int findCount(Map<String, Object> maps) {
		//调用查询行数的方法
		return materialsMapper.findCount(maps);
	}

	@Override
	public int delete(String maId,SnUser user) {
		//创建map
		Map<String, Object> map=new HashMap<>();
		//将材料id包装到map
		map.put("maId", maId);
		//将分公司id包装到map
		map.put("braId", user.getBraId());
		//调用材料库存根据分公司id和材料id查询的方法
		SnMaInventory maInventory=maInventoryMapper.selectMaBra(map);
		//将是否有效改为无效
		maInventory.setIsva(0);
		//调用材料库存修改的方法
		maInventoryMapper.updateByPrimaryKeySelective(maInventory);
		//调用根据库存id查询库存明细的方法得到库存明细集合
		List<SnMaInDetail> listDetail=maInDetailMapper.findInId(maInventory.getInId());
		//遍历库存明细集合
		for (SnMaInDetail snMaInDetail : listDetail) {
			//将明细是否有效改为无效
			snMaInDetail.setIsva(0);
			//调用库存明细修改的方法
			maInDetailMapper.updateByPrimaryKeySelective(snMaInDetail);
		}
		
		//调用材料mapper根据材料id查询的方法
		SnMaterials materials=materialsMapper.selectByPrimaryKey(maId);
		//将是否有效修改为无效
		materials.setIsva(0);
		//调用材料mapper修改的方法
		return materialsMapper.updateByPrimaryKeySelective(materials);
	}

	@Override
	public int addOrUpdate(SnMaterials materials) {
		int rows=0;
		//判断材料id是否为空 不为空则是修改 为空则是增加
		if(materials.getMaId()!=null && !"".equals(materials.getMaId())) {
			//调用材料mapper修改的方法
			rows=materialsMapper.updateByPrimaryKeySelective(materials);
		}else {
			//增加
			//将材料model材料id赋值
			materials.setMaId(Tools.getDateOrderNo());
			//将材料model操作时间赋值
			materials.setOptime(Tools.getCurDateTime());
			//将材料model是否有效赋值
			materials.setIsva(1);
			//将材料model排序赋值
			materials.setSort(Integer.valueOf(Tools.getTimeStamp()));
			//材料mapper调用增加的方法
			rows=materialsMapper.insertSelective(materials);
			
			//创建材料库存对象
			SnMaInventory maInventory=new SnMaInventory();
			//将材料库存model库存id赋值
			maInventory.setInId(Tools.getDateOrderNo());
			//将材料库存model分公司id赋值
			maInventory.setBraId("123");
			//将材料库存model材料id赋值
			maInventory.setMaId(materials.getMaId());
			//将材料库存model操作时间赋值
			maInventory.setOptime(Tools.getCurDateTime());
			//将材料库存model是否有效赋值
			maInventory.setIsva(1);
			//将材料库存model排序赋值
			maInventory.setSort(Integer.valueOf(Tools.getTimeStamp()));
			//将材料库存model材料单位赋值
			maInventory.setInUnit(materials.getMaUnit());
			//将材料库存model数量赋值
			maInventory.setInNumber(0);
			//调用材料库存mapper增加的方法
			maInventoryMapper.insertSelective(maInventory);
			
			//创建材料库存记录对象
			SnMaInDetail detail=new SnMaInDetail();
			//将材料库存记录id赋值
			detail.setMidId(Tools.getDateOrderNo());
			//将材料库存记录库存id赋值
			detail.setInId(maInventory.getInId());
			//将材料库存记录支出记录赋值
			detail.setMidExplain("增加材料"+materials.getMaName()+"库存,0件");
			//将材料库存记录是否有效赋值
			detail.setIsva(1);
			//将材料库存记录操作时间
			detail.setOptime(Tools.getCurDateTime());
			//将材料库存记录排序
			detail.setSort(Integer.valueOf(Tools.getTimeStamp()));
			//调用材料库存记录mapper增加材料库存记录的方法
			maInDetailMapper.insertSelective(detail);
		}
		return rows;
	}

	@Override
	public SnMaterials findById(String maId) {
		//调用根据id删除的方法
		return materialsMapper.selectByPrimaryKey(maId);
	}

	@Override
	public List<SnMaterials> query() {
		//调用查询所有的方法
		return materialsMapper.query();
	}
}
